// main.c
#include <pthread.h>
#include <signal.h> // <--- 添加头文件
#include <stdio.h>
#include <unistd.h>

#include "igh.h"
#include "mqtt_comm.h"
#include "term.h"

// 引用在 igh.c 或其他地方定义的全局退出标志
extern volatile bool g_quit;

/**
 * @brief 信号处理函数
 */
static void signal_handler(int sig) {
  if (!g_quit) {
    printf("\n捕获到信号 %d，准备关闭...\n", sig);
    g_quit = true;
  }
}

int main(int argc, char **argv) {
  // 安装信号处理器
  signal(SIGINT, signal_handler);
  signal(SIGTERM, signal_handler);

  // 创建ethercat线程
  pthread_t ethercat_thread;
  pthread_create(&ethercat_thread, NULL, ethercatMaster, NULL);
  // pthread_detach(ethercat_thread); // <---
  // 关键修改：不要分离线程，我们需要等待它结束

  mqtt_comm_init("192.168.137.1", 1883);
  mqtt_comm_start();

  // 初始化tcp接收服务
  term_init();

  printf("系统初始化完成，按 Ctrl+C 退出。\n");

  // 主线程循环等待退出信号
  while (!g_quit) {
    sleep(1);
  }

  printf("正在关闭系统...\n");

  // 等待EtherCAT线程完全结束
  printf("等待 EtherCAT 线程完成清理...\n");
  pthread_join(ethercat_thread, NULL); // <--- 关键修改：等待线程执行完清理逻辑

  // 清理其他资源
  mqtt_comm_cleanup();

  printf("系统已安全关闭。\n");
  return 0;
}